/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Daniel,Alejandro,Jairo
 */
import java.util.*;
import java.io.*;

public class Equipo implements Serializable{

    private String nombre;
    private String domicilio;
    private int año;
    private String himno;
    private double dinero;
    private String bandera;
    public ArrayList<Jugador> jugadores;
    private ArrayList<Directivo> directivo;

    public Equipo(String n, String d, int a, String h, double di, String b, ArrayList<Jugador> j, ArrayList<Directivo> dire) {
        this.nombre = n;
        this.año = a;
        this.dinero = di;
        this.domicilio = d;
        this.himno = h;
        this.jugadores = j;
        this.directivo = dire;
        this.bandera = b;
    }

    public boolean fichar(Jugador jugad) {
        boolean realizado = false;
        if (!this.jugadores.contains(jugad)) {
            this.jugadores.add(jugad);
            realizado = true;
        }
        return realizado;
    }

    public boolean fichar(Jugador fichado, Equipo vendedor, double precio) {
        boolean realizado = false;
        if ((this.jugadores.size() < 15) && (precio >= fichado.getPrecio()) && (this.dinero >= precio) && (vendedor.jugadores.contains(fichado))) {
            this.jugadores.add(fichado);
            realizado = true;
            vendedor.jugadores.remove(fichado);
            vendedor.setDinero(vendedor.getDinero() + precio);
            this.setDinero(this.getDinero() - precio);

        }
        return realizado;
    }

    public boolean fichar(Jugador fichado, Equipo vendedor, ArrayList<Jugador> intercambiados) {
        boolean realizado = false;
        if ((this.jugadores.size() - intercambiados.size() + 1 >= 11) && (vendedor.jugadores.size() + intercambiados.size() - 1 <= 15)) {
            int valoracion = 0;
            Iterator<Jugador> it = intercambiados.iterator();
            while (it.hasNext()) {
                valoracion = valoracion + it.next().getValoracion();
            }
            if ((fichado.getValoracion() < 1.10 * valoracion) && (fichado.getValoracion() > 0.9 * valoracion)) {
                Iterator<Jugador> it2 = intercambiados.iterator();
                while (it2.hasNext()) {
                    vendedor.jugadores.add(it2.next());
                }
                this.jugadores.add(fichado);
                vendedor.jugadores.remove(fichado);
                realizado = true;
            }
        }
        return realizado;
    }

    public boolean descartar(Jugador j) {
        boolean realizado = false;
        if (this.jugadores.contains(j)) {
            this.jugadores.remove(j);
            this.dinero = this.dinero - j.getPrecio();
            realizado = true;
        }
        return realizado;
    }

    public void ordenar() {
        Collections.sort(this.jugadores);
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDomicilio() {
        return domicilio;
    }

    public void setDomicilio(String domicilio) {
        this.domicilio = domicilio;
    }

    public int getAño() {
        return año;
    }

    public void setAño(int año) {
        this.año = año;
    }

    public String getHimno() {
        return himno;
    }

    public void setHimno(String himno) {
        this.himno = himno;
    }

    public double getDinero() {
        return dinero;
    }

    public void setDinero(double dinero) {
        this.dinero = dinero;
    }

    public String getBandera() {
        return bandera;
    }

    //Devuelve la lista de jugadores de un equipo.
    public ArrayList<Jugador> getPlantilla() {
        return this.jugadores;
    }

    public String getJugadores() {
        String res="";
        for (Jugador j:this.jugadores){
            res+=j.toString();
        }
        return res;
    }
    
    public void setBandera(String bandera) {
        this.bandera = bandera;
    }
    public Jugador buscarJugador(String nombre){
        Iterator<Jugador> it = jugadores.iterator();
        Jugador aux = null;
        boolean find=false;
        while (it.hasNext()&& find==false){
            aux=it.next();
            if(aux.getNombre_deportivo().equals(nombre)){
                find=true;
               
            }
        }
        return aux;
    }
    
    @Override
    public String toString() {
        return "nombre=" + this.nombre + ", domicilio=" + this.domicilio + ", año=" + this.año + ", himno=" + this.himno + ", dinero=" + this.dinero + ", bandera=" + this.bandera + "}" + "\n";
    }


    public boolean equals(Object c) {
        Equipo eq = (Equipo) c;
        return (this.nombre.equals((eq.getNombre())));
    }

   
   

}
